Programmers working in type-unsafe languages such as the C or C++ languages can unknowingly introduce pointer value bugs which may arise, for example, when a pointer value changes erroneously to point to an area of memory to which access was not intended. Sometimes, the programmer may not be in error at all and yet leave the door open to memory referencing errors that may crop up later when a program is linked with a separately developed software component. To catch these errors, the software industry encounters a difficult cost treadmill: as applications become richer in functionality and in diversity of the components that evolve separately, the time and effort to test them for pointer corruption errors continues to increase.
In less benign situations, pointer errors can cause software to fail in the field, and random data corruption can lead to serious consequences in damages and recovery costs. An even more pernicious problem arises from actual or latent errors in untyped, and therefore unchecked memory accesses. Malicious code can exploit such vulnerabilities such as by hijacking control by overwriting return addresses on program stacks. In the information-based modern age, such attacks may create serious threats to life and commerce, and are usually rebuffed with expensive redundancies and temporary countermeasures, often with limited success.